package com.pan.common.interview.linux;

/**
 * @author by panstark
 * @description
 * @notice
 * @date 2020/12/29
 */
public class LinuxInfo {

    /**
     * 查找特定的文件
     * find path [option] params
     * 在指定目录下查找文件
     * find -name "文件名"
     * find / -name "文件名" （全局查找）
     * find / -name "文件名*" （全局模糊查找）
     * find / -iname "文件名*" （全局模糊查找，不去区分大小写）
     */

    /**
     * 检索文件内容
     * grep：Global Regular Expression Printer
     * grep [options] pattern file
     * 作用查找文件里符合条件的字符串
     *
     * grep guoxhe 文件名* 查找所有以"文件名"开头的文件中有guoxhe的文件
     *
     * grep常用命令
     *  1、grep 'partial\[true\]' spring.log   从spring.log中过滤出含有partial[true]的行
     *  2、 grep -o 'engine\[[0-9a-z]*\]' 根据正则表达式过滤出engine[0-9a-z]*的所有行
     *  3、grep -v 'grep' 过滤掉包含字符串的命令
     *
     *  组合使用
     *  grep 'partial\[true\]' spring.log | grep -o 'engine\[[0-9a-z]*\]'
     */

    /**
     * 管道操作符 |：可将指令链接起来，前一个指令的输出作为后一个指令的输入
     * 要点：
     *   1、只处理前一个命令的正确输出，不处理错误输出
     *   2、右边命令必须能够接受标准输入流，否则传递过程中数据会被抛弃
     *   3、sed、awk、grep、cut、head、top、less、more、wc、join、sort、splite等
     *
     */

    /**
     * 对文件内容进行统计
     * awk
     *  awk[options] 'cmd' file
     *  1、一次读取一行文本，按输入分隔符进行切片，切成多个组成部分
     *  2、将切片直接保存在内建的变量中，$1,$2,---（$0表示整行内容）
     *  3、支持对单个切片的判断，支持循环判断，默认分隔符为空格
     *
     *  例如 awk '{print $1,$4}' spring.log 打印出spring.log中的第一列和第四列
     *      awk '$1=="tcp" && $2==1 {pring $0}' spring.log  打印出第一列为tcp，第二列为1的行
     *      awk '($1=="tcp" && $2==1) || NR==1 {pring $0}' spring.log  打印出第一列为tcp，第二列为1的行,将第一行带上（表头）
     *      awk -F "," '{print $1,$4}' spring.log   按"，"分割，打印出spring.log中的第一列和第四列
     *      awk '{arr[$1]++}END{for(i in arr) print i "\t" arr[i]}'  创建一个arr数组，如果内容一致则加1，打印数组内容
     *
     *
     *  统计某一字符串出现的数量
     *  grep 'partial\[true\]' spring.log | grep -o 'engine\[[0-9a-z]*\]' | awk '{enginerr[$1]++}END{for(i in enginerr) print i "\t" enginerr[i]}'
     */

    /**
     * 批量替换文件中的内容
     * sed
     *  sed [option] 'sed command' filename
     *  全名stream editor，流编辑器
     *  适用于对文本的行进行处理
     *
     *  加-i会真实修改文件，不加-i，只打印修改后内容在控制台
     *  s:对字符串操作
     *  sed -i 's/^Str/String/' spring.log  替换spring.log中所有以Str打头的字符串为String
     *  sed -i 's/\.$/\;/' spring.log  替换spring.log中所有以.结尾的"."为";"
     *  sed -i 's/Jack/me/g' spring.log中所有的Jack替换为me  （加上g替换所有的，不加g，只替换第一个匹配到的）
     *
     *  删除行
     *  sed -i '/^ *$/d' spring.log 将空行删除
     *  sed -i '/Integer/d' spring.log 将含有Integer的行删除
     */
}
